关于simulink控制系统建模的四种方法(学习笔记帖)

您所在的位置:网站首页 空间模型 简单 关于simulink控制系统建模的四种方法(学习笔记帖)

关于simulink控制系统建模的四种方法(学习笔记帖)

2023-07-28 21:13| 来源: 网络整理| 查看: 265

学习记录:原作者学习视频地址

对于控制系统,有四种方法建立模型(都属于被控系统模型)

建模中推荐将控制系统与被控系统分开,看起来不会乱

1.微分方程(数学知识,用现控第一章方框图来画) 

2.状态空间方程(现代控制理论)白箱

3.s-function函数(适合系统比较复杂的情况)

4.传递函数(经典控制理论)    黑箱

微分方程和传递函数为外部描述(输入输出描述)

状态空间方程为内部描述

在matlab中,如果已知状态空间方程,可让

G=ss(A,B,C,D);%%%构建状态空间方程  ss=state space

G1=tf(G);  %%%将状态空间方程G转换为传递函数 tf=transfer function

具体和模型对应关系如下图所示(因为传递函数无法添加初始量),所以结果与其他三个不一样

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeGJyaWRnZQ==,size_20,color_FFFFFF,t_70,g_se,x_16

s-function代码如下所示

function [sys,x0,str,ts,simStateCompliance] = fourA(t,x,u,flag,A,B,C,D) switch flag, %%%%%%%%%%%%%%%%%% % Initialization % %%%%%%%%%%%%%%%%%% case 0, [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes; %%%%%%%%%%%%%%% % Derivatives % %%%%%%%%%%%%%%% case 1, sys=mdlDerivatives(t,x,u,A,B); %%%%%%%%%% % Update % %%%%%%%%%% case 2, sys=mdlUpdate(t,x,u); %%%%%%%%%%% % Outputs % %%%%%%%%%%% case 3, sys=mdlOutputs(t,x,u,C,D); %%%%%%%%%%%%%%%%%%%%%%% % GetTimeOfNextVarHit % %%%%%%%%%%%%%%%%%%%%%%% case 4, sys=mdlGetTimeOfNextVarHit(t,x,u); %%%%%%%%%%%%% % Terminate % %%%%%%%%%%%%% case 9, sys=mdlTerminate(t,x,u); %%%%%%%%%%%%%%%%%%%% % Unexpected flags % %%%%%%%%%%%%%%%%%%%% otherwise DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); end % end sfuntmpl % %============================================================================= % mdlInitializeSizes % Return the sizes, initial conditions, and sample times for the S-function. %============================================================================= % function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes % % call simsizes for a sizes structure, fill it in and convert it to a % sizes array. % % Note that in this example, the values are hard coded. This is not a % recommended practice as the characteristics of the block are typically % defined by the S-function parameters. % sizes = simsizes; sizes.NumContStates = 2; sizes.NumDiscStates = 0; sizes.NumOutputs = 1; sizes.NumInputs = 1; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; % at least one sample time is needed sys = simsizes(sizes); % % initialize the initial conditions % x0 = [1 2]; % % str is always an empty matrix % str = []; % % initialize the array of sample times % ts = [0 0]; % Specify the block simStateCompliance. The allowed values are: % 'UnknownSimState', < The default setting; warn and assume DefaultSimState % 'DefaultSimState', < Same sim state as a built-in block % 'HasNoSimState', < No sim state % 'DisallowSimState' < Error out when saving or restoring the model sim state simStateCompliance = 'UnknownSimState'; % end mdlInitializeSizes % %============================================================================= % mdlDerivatives % Return the derivatives for the continuous states. %============================================================================= % function sys=mdlDerivatives(t,x,u,A,B) sys = A*x+B*u; % end mdlDerivatives % %============================================================================= % mdlUpdate % Handle discrete state updates, sample time hits, and major time step % requirements. %============================================================================= % function sys=mdlUpdate(t,x,u) sys = []; % end mdlUpdate % %============================================================================= % mdlOutputs % Return the block outputs. %============================================================================= % function sys=mdlOutputs(t,x,u,C,D) sys = C*x+D*u; % end mdlOutputs % %============================================================================= % mdlGetTimeOfNextVarHit % Return the time of the next hit for this block. Note that the result is % absolute time. Note that this function is only used when you specify a % variable discrete-time sample time [-2 0] in the sample time array in % mdlInitializeSizes. %============================================================================= % function sys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime = 1; % Example, set the next hit to be one second later. sys = t + sampleTime; % end mdlGetTimeOfNextVarHit % %============================================================================= % mdlTerminate % Perform any end of simulation tasks. %============================================================================= % function sys=mdlTerminate(t,x,u) sys = []; % end mdlTerminate

参数代码如下

A=[-2 1;-3 -1]; B=[0;1]; C=[1,0]; D=0;

通过选中各个输出log selected signals比较各个输出

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeGJyaWRnZQ==,size_20,color_FFFFFF,t_70,g_se,x_16结果中除传递函数外,其他输出结果重合,可见各个建模方式只是形式区别,结果无异,结果如下图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeGJyaWRnZQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 具体资源可自行下载(是免费的)

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3